#include <iostream>
using namespace std;

// nullptr是c++11用来表示空指针新引入的常量值，在c++中如果表示空指针语义时建议使用nullptr而不要使用NULL，因为NULL本质上是个int型的0。

void f(int i)
{
    cout << "void f(int i)" << endl;
}

void f(void *p)
{
    cout << "void f(void *p)" << endl;
}

int main()
{
    f(0);

    if (NULL == 0)
        cout << "NULL==0" << endl;
    // f(NULL); // ambiguous,因为NULL==0所以存在二义性，编译失败

    f(nullptr); // typedef decltype(nullptr)	nullptr_t;
    // nullptr_t为nullptr的类型
    nullptr_t nl; // 使用nullptr_t定义的任何变量都具有nullptr一样的行为
    f(nl);

    return 0;
}